#pragma once
#include "ScenePrecompiled.hxx"

namespace Eifersucht
{
	// Prototypes

	// Represents scene node content.
	class SceneChildContext; TinyTypeDecl(SceneChildContext);
	class SceneChild; TinyTypeDecl( SceneChild );

	// Implementation

	// Represents scene node content.
	class SceneChildContext
	{
		friend SceneChild;

	public:

		// Represents the scene node types to support generic features
		enum Type
		{
			Unknown, 
			Mesh, 
			Bone,
			Camera, 
			Light,
		}; 

		// Represents the scene node types to support generic features
		TinyTypeDecl(Type);

	public:

		virtual ~SceneChildContext();
		Type GetContextType();

		REIGN_HINTINLINING SceneChildConstPtr GetChild() const { return m_pRef; }
		REIGN_HINTINLINING SceneChildPtr EditChild() { return m_pRef; }

	protected: // Force abstract

		SceneChildContext();
		virtual void ReleaseExternalResources() { }

	protected:

		Eifersucht::SceneChildPtr m_pRef; // Back reference
		Type m_eCtx; // Indicates scene node attribute.

	};

	// Represents the scene node types to support generic features
	typedef SceneChildContext::Type SceneChildContextType;
	TinyTypeDecl( SceneChildContextType );
};